/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ifrr.gepro.acesso.handler;

import br.ifrr.gepro.acesso.bean.UsuarioBean;
import br.ifrr.gepro.acesso.dao.UsuarioDao;
import br.ifrr.gepro.pessoa.bean.ClienteBean;
import br.ifrr.gepro.pessoa.bean.PessoaBean;
import br.ifrr.gepro.pessoa.bean.TecnicoBean;
import br.ifrr.gepro.pessoa.dao.ClienteDao;
import br.ifrr.gepro.pessoa.dao.PessoaDao;
import br.ifrr.gepro.pessoa.dao.TecnicoDao;
import br.ifrr.gepro.util.CriptografiaMd5;
import br.ifrr.gepro.util.DAOException;
import br.ifrr.gepro.util.JsfUtil;
import br.ifrr.gepro.util.Navegacao;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpSession;

/**
 *
 * @author rafael
 */
@ManagedBean(name = "usuario")
@SessionScoped
public class UsuarioMB {

    private UsuarioBean novoUsuario = new UsuarioBean();
    private HtmlSelectOneMenu pessoaSelecionada = new HtmlSelectOneMenu();
    private ArrayList<UsuarioBean> listaUsuarios = new ArrayList<UsuarioBean>();

    public String preparaCadastro() {

        novoUsuario = new UsuarioBean();
        return Navegacao.paginaCadUsuario;
    }

    public String doEfetuarLogin() throws DAOException {
        System.out.println("EFETUANDO LOGIN!");
        UsuarioBean u = (UsuarioBean) new UsuarioDao().selecionarPorLogin(novoUsuario.getUserlogin());
        if (u != null) {
            System.out.println("usuario não nulo");
            System.out.println(CriptografiaMd5.md5(u.getSenha()));
            novoUsuario.setSenha(CriptografiaMd5.md5(novoUsuario.getSenha()));
            if (novoUsuario.getSenha().equals(u.getSenha())) {
                if (u.getAcesso().equals("ADM")) {
                    return Navegacao.paginaPrincipal;
                } else if (u.getAcesso().equals("TEC")) {
                    return Navegacao.paginaPrincipal2;
                } else if (u.getAcesso().equals("CLI")) {
                    return Navegacao.paginaPrincipal1;
                }
            }

        }
        //JsfUtil.getMB(novoUsuario);
        novoUsuario = new UsuarioBean();
        JsfUtil.showMessageErro("Login/senha inválido!");
        return null;
    }

    public String logout() {
        HttpSession sessao = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        sessao.invalidate();
        return Navegacao.paginaLogin; //AQUI EU PASSO O NOME DA MINHA TELA INICIAL.  
    }

    public String editar() throws DAOException {
        int u = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("idUsuario"));
        novoUsuario = (UsuarioBean) new UsuarioDao().selecionar(u);
        return Navegacao.paginaCadUsuario;
    }

    public String salvarcli() throws DAOException {

        // novoUsuario.setFkPessoa((PessoaBean) new PessoaDao().selecionar(Integer.parseInt(pessoaSelecionada.getValue().toString())));
        Integer idCliente = Integer.parseInt(JsfUtil.getValorDeParamentro("idCliente"));
        System.out.println(idCliente);
        novoUsuario.setFkCliente((ClienteBean) new ClienteDao().selecionar(idCliente));
        if (novoUsuario.getIdUsuario() == null) {
            novoUsuario.setSenha(CriptografiaMd5.md5(novoUsuario.getSenha()));
            new UsuarioDao().inserir(getUsuario());
        } else {
            new UsuarioDao().alterar(getUsuario());
        }
        JsfUtil.showMessageInfo("Cadastro realizado com sucesso!");
        setUsuario(new UsuarioBean());
        return Navegacao.paginaListCliente;
    }
    
    
    public String salvar() throws DAOException {

       // novoUsuario.setFkPessoa((PessoaBean) new PessoaDao().selecionar(Integer.parseInt(pessoaSelecionada.getValue().toString())));
        Integer idTecnico = Integer.parseInt(JsfUtil.getValorDeParamentro("idTecnico"));
        System.out.println(idTecnico);
        novoUsuario.setFkTecnico((TecnicoBean) new TecnicoDao().selecionar(idTecnico));
        if (novoUsuario.getIdUsuario() == null) {
            novoUsuario.setSenha(CriptografiaMd5.md5(novoUsuario.getSenha()));
            new UsuarioDao().inserir(getUsuario());
        } else {
            new UsuarioDao().alterar(getUsuario());
        }
        JsfUtil.showMessageInfo("Cadastro realizado com sucesso!");
        setUsuario(new UsuarioBean());
        return Navegacao.paginaListTecnico;
    }

    public String salvar2() throws DAOException {

        //novoUsuario.setFkPessoa((PessoaBean) new PessoaDao().selecionar(Integer.parseInt(pessoaSelecionada.getValue().toString())));
//        Integer idPessoa = Integer.parseInt(JsfUtil.getValorDeParamentro("idPessoa"));
//        System.out.println(idPessoa);
//        novoUsuario.setFkPessoa((PessoaBean) new PessoaDao().selecionar(idPessoa));
        if (novoUsuario.getIdUsuario() == null) {
            novoUsuario.setSenha(CriptografiaMd5.md5(novoUsuario.getSenha()));
            new UsuarioDao().inserir(getUsuario());
        } else {
            novoUsuario.setSenha(CriptografiaMd5.md5(novoUsuario.getSenha()));
            new UsuarioDao().alterar(getUsuario());
        }
        JsfUtil.showMessageInfo("Alteraçao realizada com sucesso!");
        setUsuario(new UsuarioBean());
        return Navegacao.paginaListUsuario;
    }
    public String excluir() throws DAOException {
        try {
            int u = Integer.parseInt(FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("idUsuario"));
            new UsuarioDao().excluir(new UsuarioBean(u));
            JsfUtil.showMessageInfo("Operação realizada com sucesso!");
        } catch (Exception e) {

            System.out.println(e.getMessage());
            System.out.println(e.getCause());
            JsfUtil.showMessageErro("Erro!");

        }
        return null;
    }

    public UsuarioBean getUsuario() {
        return novoUsuario;
    }

    public void setUsuario(UsuarioBean usuario) {
        this.novoUsuario = usuario;
    }

    public HtmlSelectOneMenu getTecnicoSelecionado() {
        return pessoaSelecionada;
    }

    public void setTecnicoSelecionado(HtmlSelectOneMenu pessoaSelecionada) {
        this.pessoaSelecionada = pessoaSelecionada;
    }

    public ArrayList<UsuarioBean> getListaUsuarios() throws DAOException {
        listaUsuarios = (ArrayList<UsuarioBean>) new UsuarioDao().listar();
        return listaUsuarios;
    }

    public void setListaUsuarios(ArrayList<UsuarioBean> listaUsuarios) {
        this.listaUsuarios = listaUsuarios;
    }

    public List<UsuarioBean> getUsuarios() throws DAOException {
        return new UsuarioDao().listar();

    }

    public List<SelectItem> getUsuariosCombo() throws DAOException {
        List<SelectItem> lista = new ArrayList<SelectItem>();
        for (UsuarioBean p : getUsuarios()) {
            lista.add(new SelectItem(p.getIdUsuario(), p.getUserlogin()));
        }
        return lista;
    }
}
